위와 같이 세가지 메서드를 가지는 클래스에서 세 함수를 함번에 기능하는 함수를 정의했을 경우
클래스 내부에 정의하는 멤버함수와 클래스 외부에 객체를 인자로 받아서 동작하는 비멤버 함수로 정의할 수 있다.
비멤버 함수로 정의하면,
패키지 유연성(packaging flexibility)를 높일 수 있으며,
컴파일 의존도를 낮추고 WebBrowser의 확장성도 높일 수 있다.
캡슐화를 하게되면, 외부에서 볼 수 있는 데이터 멤버를 제한할 수 있게 된다.
외부에서 볼 수 있는 데이터를 제한함으로 써, 이들을 바꾸는데 필요한 유연성을 크게 할 수 있다.
따라서 외부에서 데이터를 접근하는 함수가 많을 수록 데이터의 캡슐화 정도는 낮다.
비멤버 비프렌드 함수(non-member & non-friend Function)는 private 멤버가 접근할 수 있는
함수의 개수를 늘이지 않기 때문에 높은 캡슐화 수준을 유지할 수 있다.
동일한 함수와 관련된 비멤버 함수를 동일한 namespace에 둬서 관리하는 것이 자연스럽다.
추가로 하나의 주제 관련 함수를 제 3의 헤더에 몰아서 선언한다.
위와 같이 헤더를 나눔으로서, 사용자가 실제로 사용하는 구성요소에 대해서만 의존성을 고려할 수 있다.
멤버 함수는 이와 같이 기능을 쪼개는 것이 불가능하다. (하나의 클래스는 그 전체가 통으로 정의됨)
실제 C++ 라이브러리는 위와 같이 동일한 namespace std를 위와 같이 나누어서 선언해 두었다.
(<vector>, <memory>, <algorithm>, …)